1 module examples.InterfaceKit_Simple; 2 import phidget21; 3 import std.stdio : write, writeln, writefln, readln; 4 import std.string : toStringz, fromStringz; 5 6 extern(C) 7 int AttachHandler(CPhidgetHandle IFK, void* userptr) { 8 int serialNo; 9 const char* name; 10 11 CPhidget_getDeviceName(IFK, &name); 12 CPhidget_getSerialNumber(IFK, &serialNo); 13 14 writefln("%s %10d attached!", name.fromStringz, serialNo); 15 16 return 0; 17 } 18 19 extern(C) 20 int DetachHandler(CPhidgetHandle IFK, void* userptr) { 21 int serialNo; 22 const char* name; 23 24 CPhidget_getDeviceName(IFK, &name); 25 CPhidget_getSerialNumber(IFK, &serialNo); 26 27 writefln("%s %10d detached!", name.fromStringz, serialNo); 28 29 return 0; 30 } 31 32 extern(C) 33 int ErrorHandler(CPhidgetHandle IFK, void* userptr, int ErrorCode, const char* unknown) 34 { 35 writefln("Error handled. %d - %s", ErrorCode, unknown.fromStringz); 36 return 0; 37 } 38 39 extern(C) 40 int InputChangeHandler(CPhidgetInterfaceKitHandle IFK, void* usrptr, int Index, int State) { 41 writefln("Digital Input %d > State: %d", Index, State); 42 return 0; 43 } 44 45 extern(C) 46 int OutputChangeHandler(CPhidgetInterfaceKitHandle IFK, void* usrptr, int Index, int State) { 47 writefln("Digital Output %d > State: %d", Index, State); 48 return 0; 49 } 50 51 extern(C) 52 int SensorChangeHandler(CPhidgetInterfaceKitHandle IFK, void* usrptr, int Index, int Value) { 53 writefln("Sensor: %d > Value: %d", Index, Value); 54 return 0; 55 } 56 57 extern(C) 58 int display_property(CPhidgetInterfaceKitHandle phid) { 59 int serialNo, version_, numInputs, numOutputs, numSensors, triggerVal, ratiometric; 60 const char* ptr; 61 62 CPhidget_getDeviceType(cast(CPhidgetHandle)phid, &ptr); 63 CPhidget_getSerialNumber(cast(CPhidgetHandle)phid, &serialNo); 64 CPhidget_getDeviceVersion(cast(CPhidgetHandle)phid, &version_); 65 66 CPhidgetInterfaceKit_getInputCount(phid, &numInputs); 67 CPhidgetInterfaceKit_getOutputCount(phid, &numOutputs); 68 CPhidgetInterfaceKit_getSensorCount(phid, &numSensors); 69 CPhidgetInterfaceKit_getRatiometric(phid, &ratiometric); 70 71 writeln(ptr.fromStringz); 72 73 writefln("Serial Number: %10d", serialNo); 74 writefln("Version %8d", version_); 75 76 writefln("# Digital Inputs: %d", numInputs); 77 writefln("# Digital Outputs: %d", numOutputs); 78 79 writefln("# Sensors: %d", numSensors); 80 writefln("Ratiometric: %d", ratiometric); 81 82 foreach(i; 0 .. numSensors) { 83 CPhidgetInterfaceKit_getSensorChangeTrigger(phid, i, &triggerVal); 84 writefln("Sensor#: %d > Sensitivity Trigger: %d", i, triggerVal); 85 } 86 87 return 0; 88 } 89 90 int interfacekit_simple() { 91 Phidget.load(); 92 93 int result, numSensors; 94 const char* err; 95 96 CPhidgetInterfaceKitHandle ifKit; 97 CPhidgetInterfaceKit_create(&ifKit); 98 99 CPhidget_set_OnAttach_Handler(cast(CPhidgetHandle)ifKit, &AttachHandler, null); 100 CPhidget_set_OnDetach_Handler(cast(CPhidgetHandle)ifKit, &DetachHandler, null); 101 CPhidget_set_OnError_Handler(cast(CPhidgetHandle)ifKit, &ErrorHandler, null); 102 103 CPhidgetInterfaceKit_set_OnInputChange_Handler(ifKit, &InputChangeHandler, null); 104 105 CPhidgetInterfaceKit_set_OnSensorChange_Handler(ifKit, &SensorChangeHandler, null); 106 107 CPhidgetInterfaceKit_set_OnOutputChange_Handler(ifKit, &OutputChangeHandler, null); 108 109 CPhidget_open(cast(CPhidgetHandle)ifKit, -1); 110 111 write("Waiting for interface kit to be attached...."); 112 if((result = CPhidget_waitForAttachment(cast(CPhidgetHandle)ifKit, 10000)) != 0) { 113 CPhidget_getErrorDescription(result, &err); 114 writefln("Problem waiting for attachment: %s", err.fromStringz); 115 return 0; 116 } 117 118 display_property(ifKit); 119 120 writeln("Reading....."); 121 writeln("Press any key to go to next step"); 122 readln; 123 124 writeln("Modifying sensor sensitivity triggers...."); 125 126 CPhidgetInterfaceKit_getSensorCount(ifKit, &numSensors); 127 128 foreach(i; 0 .. numSensors) { 129 CPhidgetInterfaceKit_setSensorChangeTrigger(ifKit, i, 100); 130 } 131 132 writeln("Reading....."); 133 134 writeln("Press any key to go to next step"); 135 readln; 136 137 writeln("Toggling Ratiometric...."); 138 139 CPhidgetInterfaceKit_setRatiometric(ifKit, 0); 140 141 writeln("Reading....."); 142 143 writeln("Press any key to end"); 144 readln; 145 146 writeln("Closing..."); 147 CPhidget_close(cast(CPhidgetHandle)ifKit); 148 CPhidget_delete(cast(CPhidgetHandle)ifKit); 149 150 return 0; 151 } 152 153 void main() { 154 interfacekit_simple(); 155 }